package com.lp;

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.List;

public class PoiTest {

    public static void exportWordSjj() throws IOException {
        XWPFDocument doc = new XWPFDocument();
        XWPFParagraph p = doc.createParagraph();// 新建一个段落
        p.setAlignment(ParagraphAlignment.RIGHT);// 设置段落的对齐方式
        XWPFRun r = p.createRun();//创建段落文本
        CTFonts font = r.getCTR().addNewRPr().addNewRFonts();
        font.setEastAsia("宋体");
        r.setFontSize(14);
        r.setText("报告编号：YH-Z-2019-01");
        r.setBold(false);//设置为粗体
        r.setColor("000000");//设置颜色
        r.addBreak();
        r.addBreak();
        r.addBreak();
        r.addBreak();
        r.addBreak();
        r.addBreak();

        XWPFParagraph p2 = doc.createParagraph();// 新建一个段落
        p2.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
        XWPFRun r1 = p2.createRun();//创建段落文本
        CTFonts font1 = r1.getCTR().addNewRPr().addNewRFonts();
        font1.setEastAsia("黑体");
        r1.setText("检   测   报   告");
        r1.setBold(true);//设置为粗体
        r1.setFontSize(36);
        r1.setFontFamily("黑体");
        //r1.setColor("000000");//设置颜色

        XWPFParagraph p3 = doc.createParagraph();// 新建一个段落
        p3.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
        XWPFRun r2 = p3.createRun();//创建段落文本
        CTFonts font2 = r2.getCTR().addNewRPr().addNewRFonts();
        font2.setEastAsia("宋体");
        r2.setBold(true);//设置为粗体
        r2.setFontSize(14);
        r2.addBreak();//换行
        r2.addBreak();//换行
        r2.addBreak();//换行
        r2.addBreak();//换行
        r2.setColor("000000");//设置颜色
        r2.setText("样品名称（井号）：______水基钻井液______________");
        r2.addBreak();//换行
        r2.setText("委    托    单    位：_____________________________");
        r2.addBreak();//换行
        r2.setText("检    测   类    型：__________送检________________");
        r2.addBreak();//换行
        r2.setText("报    告  日    期：_____________________________");

        XWPFParagraph p4 = doc.createParagraph();// 新建一个段落
        p4.setPageBreak(true);
        p4.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
        XWPFRun r3 = p4.createRun();//创建段落文本
        CTFonts font3 = r3.getCTR().addNewRPr().addNewRFonts();
        font3.setEastAsia("宋体");
        r3.setBold(true);//设置为粗体
        r3.setFontSize(16);
        r3.setFontFamily("宋体");
        r3.setColor("000000");//设置颜色
        r3.setText("大港油田采油工艺研究院油田化学室");

        XWPFParagraph p5 = doc.createParagraph();// 新建一个段落
        p5.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
        XWPFRun r4 = p5.createRun();//创建段落文本
        CTFonts font4 = r4.getCTR().addNewRPr().addNewRFonts();
        font4.setEastAsia("宋体");
        r4.setBold(true);//设置为粗体
        r4.setFontSize(18);
        r4.setColor("000000");//设置颜色
        r4.setText("检  测  报  告");

        XWPFParagraph p6 = doc.createParagraph();// 新建一个段落
        p6.setAlignment(ParagraphAlignment.LEFT);// 设置段落的对齐方式
        XWPFRun r5 = p6.createRun();//创建段落文本
        CTFonts font5 = r5.getCTR().addNewRPr().addNewRFonts();
        font5.setEastAsia("宋体");
        r5.setFontSize(12);
        r5.setText("报告编号：YH-B-0000000                    共  2 页   第 1  页");

        //创建一个表格
        XWPFTable table= doc.createTable(15, 4);
        //xr.setUnderline(value);//下划线

        table.setWidth(1200);
        //表格宽
        CTTblPr tblPr = table.getCTTbl().getTblPr();
        tblPr.getTblW().setType(STTblWidth.DXA);
        tblPr.getTblW().setW(new BigInteger("8000"));
        //表格行高
        List<XWPFTableRow> rowList = table.getRows();
        int num=0;
        for (int i = 0; i < rowList.size(); i++) {
            //行高
            CTTrPr trPr = rowList.get(i).getCtRow().addNewTrPr();
            CTHeight ht = trPr.addNewTrHeight();
            ht.setVal(BigInteger.valueOf(660));

            //设置表格样式
            List<XWPFTableCell> cellList = rowList.get(i).getTableCells();
            for (int j = 0; j < cellList.size(); j++) {
                XWPFParagraph cellParagraph = cellList.get(j).getParagraphs().get(0);
                cellParagraph.setAlignment(ParagraphAlignment.CENTER);//居中
                cellList.get(j).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//垂直居中
            }
            //判断cell
            if(num<=3) {
                CTTcPr tcpr1 =  rowList.get(i).getCell(num).getCTTc().addNewTcPr();
                CTTblWidth cellw1 = tcpr1.addNewTcW();
                cellw1.setType(STTblWidth.DXA);
                cellw1.setW(BigInteger.valueOf(360*5));
                num = num+1;
            }
        }
        table.getRow(0).getCell(0).getParagraphs().get(0).removeRun(0);
        XWPFRun createRun = table.getRow(0).getCell(0).getParagraphs().get(0).createRun();
        createRun.setText("dakl中文不能改吗？");
        createRun.setFontFamily("方正大黑简体");
        table.getRow(0).getCell(1).setText("测试");
        table.getRow(0).getCell(2).setText("产品型号规格");
        table.getRow(0).getCell(3).setText("测试");
        table.getRow(1).getCell(0).setText("委托单位");
        table.getRow(1).getCell(1).setText("测试");
        table.getRow(1).getCell(2).setText("样品编号");
        table.getRow(1).getCell(3).setText("测试");
        table.getRow(2).getCell(0).setText("委托单位");
        table.getRow(2).getCell(1).setText("测试");
        table.getRow(2).getCell(2).setText("联系电话");
        table.getRow(2).getCell(3).setText("测试");
        table.getRow(3).getCell(0).setText("检测/类型");
        table.getRow(3).getCell(1).setText("测试");
        table.getRow(3).getCell(2).setText("生产/采样单位地址");
        table.getRow(3).getCell(3).setText("测试");
        table.getRow(4).getCell(0).setText("产品/样品数量");
        table.getRow(4).getCell(1).setText("测试");
        table.getRow(4).getCell(2).setText("样品状态、特性描述");
        table.getRow(4).getCell(3).setText("测试");
        table.getRow(5).getCell(0).setText("抽样单位");
        table.getRow(5).getCell(1).setText("测试");
        table.getRow(5).getCell(2).setText("产品（样品）生产日期及编号");
        table.getRow(5).getCell(3).setText("测试");
        table.getRow(6).getCell(0).setText("抽样基数");
        table.getRow(6).getCell(1).setText("测试");
        table.getRow(6).getCell(2).setText("抽样地点");
        table.getRow(6).getCell(3).setText("测试");
        table.getRow(7).getCell(0).setText("抽样程序");
        table.getRow(7).getCell(1).setText("测试");
        table.getRow(7).getCell(2).setText("抽、送样日期");
        table.getRow(7).getCell(3).setText("测试");
        table.getRow(8).getCell(0).setText("接收样品日期");
        table.getRow(8).getCell(1).setText("测试");
        table.getRow(8).getCell(2).setText("检测项目名称");
        table.getRow(8).getCell(3).setText("测试");
        table.getRow(9).getCell(0).setText("检测日期");
        table.getRow(9).getCell(1).setText("测试");
        table.getRow(9).getCell(2).setText("检测依据");
        table.getRow(9).getCell(3).setText("测试");
        table.getRow(10).getCell(0).setText("检测环境条件情况");
        table.getRow(10).getCell(1).setText("测试");
        table.getRow(10).getCell(2).setText("检测地点（实验室内、外）");
        table.getRow(10).getCell(3).setText("测试");
        //使用第11行
        List<XWPFTableCell> tableName = table.getRow(11).getTableCells();
        tableName.get(0).setText("检测使用主要仪器设备"); //为第11行第11列设置内容
        //将第一列到第3列合并
        for (int i = 1; i <= 3; i++) {
            //对单元格进行合并的时候,要标志单元格是否为起点,或者是否为继续合并
            if (i == 1)
                tableName.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);//这是起点
            else
                tableName.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);//继续合并
        }
        tableName.get(1).setText("这是合并之后的表格");//为第1行1到4合并之后的单元格设置内容

        //使用第12行
        List<XWPFTableCell> tableName2 = table.getRow(12).getTableCells();
        tableName2.get(0).setText("检测结论"); //为第11行第11列设置内容
        //将第一列到第3列合并
        for (int i = 1; i <= 3; i++) {
            //对单元格进行合并的时候,要标志单元格是否为起点,或者是否为继续合并
            if (i == 1)
                tableName2.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);//这是起点
            else
                tableName2.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);//继续合并
        }
        tableName2.get(1).setText("这是合并之后的表格");//为第1行1到4合并之后的单元格设置内容

        //使用第13行
        List<XWPFTableCell> tableName3 = table.getRow(13).getTableCells();
        tableName3.get(0).setText("检测结论"); //为第11行第11列设置内容
        //将第一列到第3列合并
        for (int i = 1; i <= 3; i++) {
            //对单元格进行合并的时候,要标志单元格是否为起点,或者是否为继续合并
            if (i == 1)
                tableName3.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);//这是起点
            else
                tableName3.get(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);//继续合并
        }
        tableName3.get(1).setText("这是合并之后的表格");//为第1行1到4合并之后的单元格设置内容
        table.getRow(14).getCell(0).setText("审核人及审核日期");
        table.getRow(14).getCell(1).setText("测试");
        table.getRow(14).getCell(2).setText("批准人及批准日期");
        table.getRow(14).getCell(3).setText("测试");
        File file = new File("d:\\test.docx");
        FileOutputStream out = new FileOutputStream(file);
        doc.write(out);
        out.close();
    }

    public static void main(String[] args) throws IOException {
        exportWordSjj();
    }
}
